#include <iostream>
#include <unordered_map>
#include <gtest/gtest.h>
// 全局事件:针对整个测试程序,提供全局事件机制,能够在测试之前配置(初始化)测试环境数据,测试完毕后清理数据
// 先定义环境类,通过继承testing::Environment的派⽣类来完成
// 重写的虚函数接⼝SetUp会在测试之前被调⽤; TearDown会在测试完毕后调⽤.
std::unordered_map<std::string, std::string> dict;

class HashTestEnv : public testing::Environment
{
public:
    // 1. 先执行初始化 (在所有的单元测试之前进行初始化)
    virtual void SetUp() override
    {
        std::cout << "测试前:提前准备数据!!\n";
        dict.insert(std::make_pair("Hello", "你好"));
        dict.insert(std::make_pair("hello", "你好"));
        dict.insert(std::make_pair("雷吼", "你好"));
    }
    // 4. 执行结束进行清理(在所有的单元测试结束之后进行清理)
    virtual void TearDown() override
    {
        std::cout << "测试结束后:清理数据!!\n";
        dict.clear();
    }
};
// 2.
TEST(HashTestEnv, find_test)
{
    auto it = dict.find("hello");
    ASSERT_NE(it, dict.end());
    std::cout << "单元测试一" << std::endl;
}
// 3.
TEST(HashTestEnv, size_test)
{
    ASSERT_GT(dict.size(), 0);
    std::cout << "单元测试二" << std::endl;
}

int main(int argc, char *argv[])
{
    testing::AddGlobalTestEnvironment(new HashTestEnv);
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
